home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-05-14 | 48.5 KB | 1,650 lines |
- Newsgroups: comp.sources.misc
- From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Subject: v06i111: glib part 10 of 15
- Reply-To: lee@uhccux.uhcc.Hawaii.Edu (Greg Lee )
-
- Posting-number: Volume 6, Issue 111
- Submitted-by: lee@uhccux.uhcc.Hawaii.Edu (Greg Lee )
- Archive-name: glib/part10
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 10 (of 15)."
- # Contents: dx7s.mnu yama_com.c
- # Wrapped by lee@uhccux on Sun May 7 00:40:17 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'dx7s.mnu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'dx7s.mnu'\"
- else
- echo shar: Extracting \"'dx7s.mnu'\" \(21591 characters\)
- sed "s/^X//" >'dx7s.mnu' <<'END_OF_FILE'
- X/* $Id: dx7s.mnu,v 1.6 89/05/06 17:13:23 lee Exp $
- X * GLIB - a Generic LIBrarian and editor for synths
- X *
- X * DX-7s routines
- X *
- X * Scott Snyder - ssnyder@citromeo.bitnet, ssnyder@romeo.caltech.edu
- X * $Log: dx7s.mnu,v $
- X * Revision 1.6 89/05/06 17:13:23 lee
- X * rel. to comp.sources.misc
- X *
- X */
- X
- X#define ARYLEN(a) (sizeof((a))/sizeof((a)[0]))
- X
- X#define BITS(x, start, len) (((x) >> (start)) & ((1<<(len))-1))
- X
- X#define OVERLAY1
- X
- X#define VCED_SIZE 155
- X#define ADVCED_SIZE 49
- X
- X#define VMEM_SIZE 128
- X#define ADVMEM_SIZE 35
- X#define NVOICES 32
- X
- X#include "glib.h"
- X#include <ctype.h>
- X
- Xchar *visnum(), *visonoff(), *vism3num(), *viswave(), *vismono();
- Xchar *visfreq(), *visdx1a(), *visr2num();
- X
- Xchar *visxq(), *visxx(), *vism7num(), *visx7note(), *visx7crv();
- Xchar *visx7a(), *visx7wave(), *visx7brkpt();
- X
- Xchar *visxq1(), *visxq2(), *visxq3();
- Xchar *visxq4(), *visxq5(), *visxq6();
- Xchar *visxx1(), *visxx2(), *visxx3();
- Xchar *visxx4(), *visxx5(), *visxx6();
- X
- Xchar *vissport(), *visspbmode(), *visspegrng(), *visssngl();
- Xchar *vissmono(), *vissedmde(), *vissmpm(), *vissmam();
- Xchar *vissmeg(), *vissm4(), *visssclm(), *visx7crv();
- X
- Xchar *vissf1(), *vissf2(), *vissf3();
- Xchar *vissf4(), *vissf5(), *vissf6();
- X
- X#define RESERVESIZE VMEM_SIZE
- X
- X/* This array contains arbitrary screen labels */
- Xstruct labelinfo Ldx7S[] = {
- X#MENU
- X N: set name; q: quit; K: incr; J: decr; >: max; <: min k
- X space: play autonote Pitch % Vol % Dur % Chan % h l
- X j
- X Atk Sust1 Sust2 Rls Scal Out De Rat Sens Brk Depth Curve
- XOP Rt Lv Rt Lv Rt Lv Rt Lv Freq Mode Lvl tun Scl Key AM Pt L R L R
- X-- -- -- -- -- -- -- -- -- ------- ---- --- --- --- --- -- ---- -- -- ---- ----
- X 1 % % % % % % % % % % % % % % % % % % % % %
- X 2 % % % % % % % % % % % % % % % % % % % % %
- X 3 % % % % % % % % % % % % % % % % % % % % %
- X 4 % % % % % % % % % % % % % % % % % % % % %
- X 5 % % % % % % % % % % % % % % % % % % % % %
- X 6 % % % % % % % % % % % % % % % % % % % % %
- XPE % % % % % % % %
- X Osc. Sync % Rnd Pitch @
- XAlgorithm % LFO trigger % Feedback % Port. mode @
- X============== LFO Speed % Middle C % Port. step @
- X LFO Delay % PEG Range % Port. time @
- X LFO AM Depth % PEG by vel %
- X LFO PM Depth % PEG Rate Scl % @
- X LFO Wave % PB Range % PM range @
- X LFO Sync % PB Step % AM range @
- X LFO PM Sense % PB Mode % EG bias @
- X Unison detune % Poly/Mono % @
- X FC1 is CS1 % Unison mode %
- X#END
- X-1,-1,NULL
- X};
- X
- X/* This array defines all the editable parameters. */
- Xstruct paraminfo Pdx7S[] = {
- X"autopitch", NULL, -1, -1, %%, visnum, 0, 127, 60, 0,
- X"autovol", NULL, -1, -1, %%, visnum, 0, 127, 63, 0,
- X"autodur", NULL, -1, -1, %%, visnum, 1, 20, 5, 0,
- X"autochan", NULL, -1, -1, %%, visnum, 1, 16, 1, 0,
- X
- X"op1atkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1atklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1sust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1sust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1sust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1sust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1rlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1rlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1freq", NULL, -1, -1, %%, visxq1, 0, 4067, 0, 0,
- X"op1fx", NULL, -1, -1, %%, vissf1, 0, 1, 0, 0,
- X#O op1scalmode ssclm %% 1 0 0x20 5
- X"op1outlevel", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1detune", NULL, -1, -1, %%, vism7num, 0, 14, 0, 0,
- X"op1ratscl", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"op1tchsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O op1amsens num %% 7 3 0x38 3
- X"op1brkpt", NULL, -1, -1, %%, visx7brkpt,0, 99, 0, 0,
- X"op1ldepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1rdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op1lcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op1rcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op1modsens", NULL, -1, -1,-1,-1, visnum, 0, 3, 0, 0,
- X
- X"op2atkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2atklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2sust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2sust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2sust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2sust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2rlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2rlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2freq", NULL, -1, -1, %%, visxq2, 0, 4067, 0, 0,
- X"op2fx", NULL, -1, -1, %%, vissf2, 0, 1, 0, 0,
- X#O op2scalmode ssclm %% 1 0 0x10 4
- X"op2outlevel", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2detune", NULL, -1, -1, %%, vism7num, 0, 14, 0, 0,
- X"op2ratscl", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"op2tchsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O op2amsens num %% 7 3 0x07
- X"op2brkpt", NULL, -1, -1, %%, visx7brkpt,0, 99, 0, 0,
- X"op2ldepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2rdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op2lcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op2rcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op2modsens", NULL, -1, -1,-1,-1, visnum, 0, 3, 0, 0,
- X
- X"op3atkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3atklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3sust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3sust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3sust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3sust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3rlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3rlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3freq", NULL, -1, -1, %%, visxq3, 0, 4067, 0, 0,
- X"op3fx", NULL, -1, -1, %%, vissf3, 0, 1, 0, 0,
- X#O op3scalmode ssclm %% 1 0 0x08 3
- X"op3outlevel", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3detune", NULL, -1, -1, %%, vism7num, 0, 14, 0, 0,
- X"op3ratscl", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"op3tchsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O op3amsens num %% 7 2 0x38 3
- X"op3brkpt", NULL, -1, -1, %%, visx7brkpt,0, 99, 0, 0,
- X"op3ldepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3rdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op3lcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op3rcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op3modsens", NULL, -1, -1,-1,-1, visnum, 0, 3, 0, 0,
- X
- X"op4atkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4atklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4sust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4sust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4sust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4sust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4rlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4rlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4freq", NULL, -1, -1, %%, visxq4, 0, 4067, 0, 0,
- X"op4fx", NULL, -1, -1, %%, vissf4, 0, 1, 0, 0,
- X#O op4scalmode ssclm %% 1 0 0x04 2
- X"op4outlevel", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4detune", NULL, -1, -1, %%, vism7num, 0, 14, 0, 0,
- X"op4ratscl", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"op4tchsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O op4amsens num %% 7 2 0x07
- X"op4brkpt", NULL, -1, -1, %%, visx7brkpt,0, 99, 0, 0,
- X"op4ldepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4rdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op4lcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op4rcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op4modsens", NULL, -1, -1,-1,-1, visnum, 0, 3, 0, 0,
- X
- X"op5atkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5atklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5sust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5sust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5sust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5sust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5rlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5rlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5freq", NULL, -1, -1, %%, visxq5, 0, 4067, 0, 0,
- X"op5fx", NULL, -1, -1, %%, vissf5, 0, 1, 0, 0,
- X#O op5scalmode ssclm %% 1 0 0x02 1
- X"op5outlevel", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5detune", NULL, -1, -1, %%, vism7num, 0, 14, 0, 0,
- X"op5ratscl", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"op5tchsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O op5amsens num %% 7 1 0x38 3
- X"op5brkpt", NULL, -1, -1, %%, visx7brkpt,0, 99, 0, 0,
- X"op5ldepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5rdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op5lcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op5rcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op5modsens", NULL, -1, -1,-1,-1, visnum, 0, 3, 0, 0,
- X
- X"op6atkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6atklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6sust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6sust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6sust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6sust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6rlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6rlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6freq", NULL, -1, -1, %%, visxq6, 0, 4067, 0, 0,
- X"op6fx", NULL, -1, -1, %%, vissf6, 0, 1, 0, 0,
- X#O op6scalmode ssclm %% 1 0 0x01
- X"op6outlevel", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6detune", NULL, -1, -1, %%, vism7num, 0, 14, 0, 0,
- X"op6ratscl", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"op6tchsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O op6amsens num %% 7 1 0x07
- X"op6brkpt", NULL, -1, -1, %%, visx7brkpt,0, 99, 0, 0,
- X"op6ldepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6rdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"op6lcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op6rcurve", NULL, -1, -1, %%, visx7crv, 0, 3, 0, 0,
- X"op6modsens", NULL, -1, -1,-1,-1, visnum, 0, 3, 0, 0,
- X
- X"pegatkrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegatklv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegsust1rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegsust1lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegsust2rt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegsust2lv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegrlsrt", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"pegrlslv", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X
- X"oscsync", NULL, -1, -1, %%, visonoff, 0, 1, 0, 0,
- X"algorithm", NULL, -1, -1, %%, visx7a, 0, 31, 0, 0,
- X#O lfotrig ssngl %% 1 4 0x04 2
- X"feedback", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X"lfospeed", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X"transpose", NULL, -1, -1, %%, visx7note, 0, 48, 0, 0,
- X"lfodelay", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X#O pegrange spegrng %% 3 4 0x03
- X"lfoamdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X#O pegvel onoff %% 1 4 0x08 3
- X"lfopmdepth", NULL, -1, -1, %%, visnum, 0, 99, 0, 0,
- X#O pegratscl num %% 7 24 0x07
- X"lfowave", NULL, -1, -1, %%, visx7wave, 0, 5, 0, 0,
- X#O pbrange num %% 12 5 0x3C 2
- X"lfosync", NULL, -1, -1, %%, visonoff, 0, 1, 0, 0,
- X#O pbstep num %% 12 6 0x0F
- X"lfopmsens", NULL, -1, -1, %%, visnum, 0, 7, 0, 0,
- X#O pbmode spbmode %% 3 6 0x30 4
- X#O unidetune num %% 7 34 0x07
- X#O polymono smono %% 1 5 0x01
- X#O fc1_cs1 onoff %% 1 34 0x08 3
- X#O unison onoff %% 1 5 0x02 1
- X
- X#O rndpitch num @@ 7 4 0x70 4
- X#O portmode sport @@ 1 7 0x01
- X#O portstep num @@ 12 7 0x1E 1
- X#O porttime num @@ 99 8
- X
- X/*
- X * note: for proper operation of this hack, the 'edit mode' parm must be
- X * displayed before any of the dummy parms when the screen is first being
- X * drawn. making it alphabetically less will accomplish this.
- X */
- X
- X"_aeditmode", NULL, -1, -1, @@, vissedmde, 0, 5, 0, 0,
- X"_dummy_pm", NULL, -1, -1, @@, vissmpm, 0, 99, 0, 0,
- X"_dummy_am", NULL, -1, -1, @@, vissmam, 0, 99, 0, 0,
- X"_dummy_eg", NULL, -1, -1, @@, vissmeg, 0, 99, 0, 0,
- X"_dummy4", NULL, -1, -1, @@, vissm4, 0, 99, 0, 1,
- X
- X#O mw_pm num -- 99 9
- X#O mw_am num -- 99 10
- X#O mw_eg num -- 99 11
- X#O mw_vol num -- 99 -1
- X
- X#O fc1_pm num -- 99 12
- X#O fc1_am num -- 99 13
- X#O fc1_eg num -- 99 14
- X#O fc1_vol num -- 99 15
- X
- X#O fc2_pm num -- 99 26
- X#O fc2_am num -- 99 27
- X#O fc2_eg num -- 99 28
- X#O fc2_vol num -- 99 29
- X
- X#O midi_pm num -- 99 30
- X#O midi_am num -- 99 31
- X#O midi_eg num -- 99 32
- X#O midi_vol num -- 99 33
- X
- X#O bc_pm num -- 99 16
- X#O bc_am num -- 99 17
- X#O bc_eg num -- 99 18
- X#O bc_pitchb num -- 100 19
- X
- X#O at_pm num -- 99 20
- X#O at_am num -- 99 21
- X#O at_eg num -- 99 22
- X#O at_pitchb num -- 100 23
- X
- XNULL, NULL, -1, -1, -1, -1, visnum, 0, 0, 0, 0
- X};
- X
- Xchar *vissmono(v)
- Xint v;
- X{
- X showparam(parmindex("portmode"), 0);
- X return vismono(v);
- X}
- X
- Xchar *visssngl(v)
- Xint v;
- X{
- X if (v == 0)
- X return "Single";
- X else
- X return "Multi";
- X}
- X
- Xchar *visspegrng(v)
- Xint v;
- X{
- X switch (v) {
- X case 0: return "8oct";
- X case 1: return "2oct";
- X case 2: return "1oct";
- X case 3: return "1/2oct";
- X default: return "???";
- X }
- X}
- X
- Xchar *visspbmode(v)
- Xint v;
- X{
- X switch (v) {
- X case 0: return "Norm";
- X case 1: return "Low";
- X case 2: return "High";
- X case 3: return "Key On";
- X default: return "???";
- X }
- X}
- X
- Xchar *vissport(v)
- Xint v;
- X{
- X if (getval("polymono") == 0)
- X if (v == 0)
- X return "Retain";
- X else
- X return "Follow";
- X else
- X if (v == 0)
- X return "Fingrd";
- X else
- X return "Fulltm";
- X}
- X
- Xchar *edmdes[] = {
- X "Modulation Wheel",
- X "Aftertouch",
- X "Breath Control",
- X "Foot Control 1",
- X "Foot Control 2",
- X "MIDI Control",
- X};
- X
- Xchar *edmde_prefixes[] = {"mw", "at", "bc", "fc1", "fc2", "midi",};
- X
- Xchar *mk_mode_parm(v, suffix)
- Xunsigned v;
- Xchar *suffix;
- X{
- X static char buf[20];
- X
- X if (v < ARYLEN(edmde_prefixes)) {
- X (void)sprintf(buf, "%s_%s", edmde_prefixes[v], suffix);
- X return buf;
- X }
- X else return "???";
- X}
- X
- Xchar *vissedmde(v, eras)
- Xunsigned v, eras;
- X{
- X int j;
- X static char buf[30];
- X
- X if (eras) {
- X showparam(parmindex("_dummy_pm"), 1);
- X showparam(parmindex("_dummy_am"), 1);
- X showparam(parmindex("_dummy_eg"), 1);
- X showparam(parmindex("_dummy4"), 1);
- X }
- X else {
- X setval("_dummy_pm", getval(mk_mode_parm(v, "pm")));
- X setval("_dummy_am", getval(mk_mode_parm(v, "am")));
- X setval("_dummy_eg", getval(mk_mode_parm(v, "eg")));
- X
- X showparam(parmindex("_dummy_pm"), 0);
- X showparam(parmindex("_dummy_am"), 0);
- X showparam(parmindex("_dummy_eg"), 0);
- X
- X j = parmindex("_dummy4");
- X if (v == 0) /* MW */
- X disableparm(j);
- X else {
- X enableparm(j);
- X if (v == 1 || v == 2) { /* BC, AT */
- X P[j].p_max = 100;
- X setval("_dummy4", getval(mk_mode_parm(v, "pitchb")));
- X }
- X else {
- X P[j].p_max = 99;
- X setval("_dummy4", getval(mk_mode_parm(v, "vol")));
- X }
- X showparam(j, 0);
- X }
- X }
- X
- X (void)sprintf(buf, "~15l%s", v < ARYLEN(edmdes) ? edmdes[v] : "???");
- X return buf;
- X}
- X
- Xchar *vissmpm(v)
- Xint v;
- X{
- X setval(mk_mode_parm((unsigned)getval("_aeditmode"), "pm"), v);
- X return visnum(v);
- X}
- X
- Xchar *vissmam(v)
- Xint v;
- X{
- X setval(mk_mode_parm((unsigned)getval("_aeditmode"), "am"), v);
- X return visnum(v);
- X}
- X
- Xchar *vissmeg(v)
- Xint v;
- X{
- X setval(mk_mode_parm((unsigned)getval("_aeditmode"), "eg"), v);
- X return visnum(v);
- X}
- X
- Xchar *vissm4(v)
- Xint v;
- X{
- X int mode = getval("_aeditmode");
- X static char buf[40];
- X
- X if (mode == 1 || mode == 2) { /* BC, AT */
- X setval(mk_mode_parm((unsigned)mode, "pitchb"), v);
- X (void)sprintf(buf, "~15lPitch Bias~5 %s", visnum(v-50));
- X return buf;
- X }
- X else {
- X setval(mk_mode_parm((unsigned)mode, "vol"), v);
- X (void)sprintf(buf, "~15lVolume Range~3 %s", visnum(v));
- X return buf;
- X }
- X}
- X
- Xchar *visssclm(v)
- Xint v;
- X{
- X if (v == 0)
- X return "Norm";
- X else
- X return "Frac";
- X}
- X
- Xchar *vissf1(v) { return visxx(v, 1, 1); }
- Xchar *vissf2(v) { return visxx(v, 2, 1); }
- Xchar *vissf3(v) { return visxx(v, 3, 1); }
- Xchar *vissf4(v) { return visxx(v, 4, 1); }
- Xchar *vissf5(v) { return visxx(v, 5, 1); }
- Xchar *vissf6(v) { return visxx(v, 6, 1); }
- X
- Xdx7Sdin(data)
- Xchar *data;
- X{
- X int op;
- X
- X#SETVAL
- X
- X dx7din(data);
- X
- X for (op=1; op <= 6; op++)
- X setopval(op, "modsens", 0);
- X}
- X
- Xdx7Sdout(data)
- Xchar *data;
- X{
- X#GETVAL
- X dx7dout(data);
- X}
- X
- Xdx7Sadvmemtoadvced(in, out)
- Xchar *in, *out;
- X{
- X int op;
- X
- X for (op=1; op <= 6; op++)
- X out[6-op] = BITS(in[0], (6-op), 1); /* scaling mode */
- X out[ 6] = BITS(in[1], 0, 3); /* op6 am sens */
- X out[ 7] = BITS(in[1], 3, 3); /* op5 am sens */
- X out[ 8] = BITS(in[2], 0, 3); /* op4 am sens */
- X out[ 9] = BITS(in[2], 3, 3); /* op3 am sens */
- X out[10] = BITS(in[3], 0, 3); /* op2 am sens */
- X out[11] = BITS(in[3], 3, 3); /* op1 am sens */
- X
- X out[12] = BITS(in[4], 0, 2); /* pegrange */
- X out[13] = BITS(in[4], 2, 1); /* lfotrig */
- X out[14] = BITS(in[4], 3, 1); /* pegvel */
- X out[15] = BITS(in[5], 0, 2); /* polymono/unison */
- X out[16] = BITS(in[5], 2, 4); /* pbrange */
- X out[17] = BITS(in[6], 0, 4); /* pbstep */
- X out[18] = BITS(in[6], 4, 2); /* pbmode */
- X out[19] = BITS(in[4], 4, 3); /* rndpitch */
- X out[20] = BITS(in[7], 0, 1); /* portmode */
- X out[21] = BITS(in[7], 1, 4); /* portstep */
- X out[22] = in[8]; /* porttime */
- X
- X out[23] = in[9]; /* mw_pm */
- X out[24] = in[10]; /* mw_am */
- X out[25] = in[11]; /* mw_eg */
- X
- X out[26] = in[12]; /* fc1_pm */
- X out[27] = in[13]; /* fc1_am */
- X out[28] = in[14]; /* fc1_eg */
- X out[29] = in[15]; /* fc1_vol */
- X
- X out[30] = in[16]; /* bc_pm */
- X out[31] = in[17]; /* bc_am */
- X out[32] = in[18]; /* bc_eg */
- X out[33] = in[19]; /* bc_pitchb */
- X
- X out[34] = in[20]; /* at_pm */
- X out[35] = in[21]; /* at_am */
- X out[36] = in[22]; /* at_eg */
- X out[37] = in[23]; /* at_pitchb */
- X
- X out[38] = BITS(in[24], 0, 3); /* pegratscl */
- X
- X out[39] = in[26]; /* fc2_pm */
- X out[40] = in[27]; /* fc2_am */
- X out[41] = in[28]; /* fc2_eg */
- X out[42] = in[29]; /* fc2_vol */
- X
- X out[43] = in[30]; /* midi_pm */
- X out[44] = in[31]; /* midi_am */
- X out[45] = in[32]; /* midi_eg */
- X out[46] = in[33]; /* midi_vol */
- X
- X out[47] = BITS(in[34], 0, 3); /* unidetune */
- X out[48] = BITS(in[34], 3, 1); /* fc1_cs1 */
- X}
- X
- Xdx7Ssadvced(data)
- Xchar *data;
- X{
- X return dx7send_bulk(5, ADVCED_SIZE, data);
- X}
- X
- Xdx7Ssedit(data)
- Xchar *data;
- X{
- X char edmem[ADVCED_SIZE];
- X
- X dx7Sadvmemtoadvced(data+128, edmem);
- X return dx7sedit(data) || dx7Ssadvced(edmem);
- X}
- X
- Xstatic int alloc_bufs(vmem, advmem)
- Xchar **vmem, **advmem;
- X{
- X if ((*vmem = (char *)malloc(NVOICES * VMEM_SIZE)) != NULL) {
- X if ((*advmem = (char *)malloc(NVOICES * ADVMEM_SIZE)) != NULL)
- X return 0;
- X free(*vmem);
- X }
- X
- X Reason = "Couldn't allocate enough buffer space";
- X return 1;
- X}
- X
- Xstatic split_data(data, vmem, advmem)
- Xchar *data, *vmem, *advmem;
- X{
- X int i;
- X
- X for (i=0; i<NVOICES; i++) {
- X memcpy(vmem, data, VMEM_SIZE);
- X memcpy(advmem, data+VMEM_SIZE, ADVMEM_SIZE);
- X data += VMEM_SIZE + ADVMEM_SIZE;
- X vmem += VMEM_SIZE;
- X advmem += ADVMEM_SIZE;
- X }
- X}
- X
- Xstatic combine_data(data, vmem, advmem)
- Xchar *data, *vmem, *advmem;
- X{
- X int i;
- X
- X for (i=0; i<NVOICES; i++) {
- X memcpy(data, vmem, VMEM_SIZE);
- X memcpy(data+VMEM_SIZE, advmem, ADVMEM_SIZE);
- X data += VMEM_SIZE + ADVMEM_SIZE;
- X vmem += VMEM_SIZE;
- X advmem += ADVMEM_SIZE;
- X }
- X}
- X
- Xdx7Ssbulk(data)
- Xchar *data;
- X{
- X char *vmem, *advmem;
- X int retstat;
- X
- X if (alloc_bufs(&vmem, &advmem)) return 1;
- X split_data(data, vmem, advmem);
- X
- X retstat = dx7sbulk(vmem) || dx7send_bulk(6, NVOICES * ADVMEM_SIZE, advmem);
- X
- X free(vmem);
- X free(advmem);
- X
- X return retstat;
- X}
- X
- Xdx7Sgbulk(data)
- Xchar *data;
- X{
- X char *vmem, *advmem;
- X int retstat;
- X
- X if (alloc_bufs(&vmem, &advmem)) return 1;
- X
- X retstat = dx7gbulk(vmem) || dx7get_bulk(6, NVOICES * ADVMEM_SIZE, advmem);
- X
- X if (!retstat) combine_data(data, vmem, advmem);
- X
- X free(vmem);
- X free(advmem);
- X
- X return retstat;
- X}
- X
- Xstatic char deflt_advmem[] = {
- X 0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
- X 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
- X
- X/* read a DX7 file as a DX7S file */
- X
- Xdx7Sread_dx7(f, data)
- XFILE *f;
- Xchar *data;
- X{
- X int v;
- X
- X message("Reading DX7 bank");
- X
- X for (v=0; v<NVOICES; v++) {
- X (void)fread(data, VMEM_SIZE, 1, f);
- X memcpy(data+VMEM_SIZE, deflt_advmem, ADVMEM_SIZE);
- X data += VMEM_SIZE + ADVMEM_SIZE;
- X }
- X}
- X
- X/* read a DX7s file as a DX7 file */
- X
- Xdx7read_dx7S(f, data)
- XFILE *f;
- Xchar *data;
- X{
- X int v;
- X
- X message("Reading DX7s bank");
- X
- X#ifndef SEEK_CUR
- X#define SEEK_CUR 1
- X#endif
- X for (v=0; v<NVOICES; v++) {
- X (void)fread(data, VMEM_SIZE, 1, f);
- X fseek(f, (long)ADVMEM_SIZE, SEEK_CUR);
- X data += VMEM_SIZE;
- X }
- X}
- END_OF_FILE
- if test 21591 -ne `wc -c <'dx7s.mnu'`; then
- echo shar: \"'dx7s.mnu'\" unpacked with wrong size!
- fi
- # end of 'dx7s.mnu'
- fi
- if test -f 'yama_com.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'yama_com.c'\"
- else
- echo shar: Extracting \"'yama_com.c'\" \(24461 characters\)
- sed "s/^X//" >'yama_com.c' <<'END_OF_FILE'
- X/* $Id: yama_com.c,v 1.6 89/05/06 17:13:47 lee Exp $
- X * GLIB - a Generic LIBrarian and editor for synths
- X *
- X * Yamaha Common Routines
- X * Tim Thompson
- X * modifications: Greg Lee
- X * $Log: yama_com.c,v $
- X * Revision 1.6 89/05/06 17:13:47 lee
- X * rel. to comp.sources.misc
- X *
- X */
- X
- X#define OVERLAY1
- X
- X#include "glib.h"
- X#include <ctype.h>
- X
- X#define DX100VSIZE 128
- X#define DX100NSIZE 17
- X
- Xchar *visnum(), *visonoff(), *vism3num(), *viswave(), *vismono();
- Xchar *visfreq(), *visdx1a();
- Xextern int Tx81;
- X
- Xint *txindex = NULL;
- Xint txleng = 0;
- X
- X
- Xextern int Dopmap[];
- X
- Xint Tx81 = 0; /* 1 means we're talking to the TX81Z */
- Xint Dopmap[] = { 3,1,2,0 };
- X
- Xint txfreq[] = {
- X50, 56, 62, 69, 75, 81, 87, 93,
- X 100, 106, 112, 118, 124, 131, 137, 143,
- X71, 80, 88, 97, 106, 115, 123, 132,
- X 141, 149, 158, 167, 176, 184, 193, 202,
- X78, 88, 98, 107, 117, 127, 137, 147,
- X 156, 166, 176, 186, 196, 205, 215, 225,
- X87, 98, 108, 119, 130, 141, 151, 162,
- X 173, 183, 194, 205, 216, 226, 237, 248,
- X100, 106, 112, 119, 125, 131, 137, 143,
- X 149, 156, 162, 168, 174, 180, 187, 193,
- X141, 150, 159, 167, 176, 185, 194, 203,
- X 211, 220, 229, 238, 247, 255, 264, 273,
- X157, 167, 177, 186, 196, 206, 216, 226,
- X 235, 245, 255, 265, 275, 284, 294, 304,
- X173, 184, 195, 205, 216, 227, 238, 249,
- X 259, 270, 281, 292, 303, 313, 324, 335,
- X200, 206, 212, 218, 225, 231, 237, 243,
- X 249, 256, 262, 268, 274, 280, 287, 293,
- X282, 291, 300, 308, 317, 326, 335, 344,
- X 352, 361, 370, 379, 388, 396, 405, 414,
- X300, 306, 312, 318, 325, 331, 337, 343,
- X 349, 356, 362, 368, 374, 380, 387, 393,
- X314, 324, 334, 343, 353, 363, 373, 383,
- X 392, 402, 412, 422, 432, 441, 451, 461,
- X346, 357, 368, 378, 389, 400, 411, 422,
- X 432, 443, 454, 465, 476, 486, 497, 508,
- X400, 406, 412, 418, 425, 431, 437, 443,
- X 449, 456, 462, 468, 474, 480, 487, 493,
- X424, 433, 441, 450, 459, 468, 476, 485,
- X 494, 503, 511, 520, 529, 537, 546, 555,
- X471, 481, 491, 500, 510, 520, 530, 539,
- X 549, 559, 569, 579, 588, 598, 608, 618,
- X500, 506, 512, 519, 525, 531, 537, 543,
- X 550, 556, 562, 568, 574, 581, 587, 593,
- X519, 530, 540, 551, 562, 573, 584, 594,
- X 605, 616, 627, 638, 648, 659, 670, 681,
- X565, 574, 582, 591, 600, 609, 617, 626,
- X 635, 644, 652, 661, 670, 678, 687, 696,
- X600, 606, 612, 619, 625, 631, 637, 643,
- X 650, 656, 662, 668, 674, 681, 687, 693,
- X628, 638, 647, 657, 667, 677, 687, 696,
- X 706, 716, 726, 736, 745, 755, 765, 775,
- X692, 703, 713, 724, 735, 746, 757, 767,
- X 778, 789, 800, 811, 821, 832, 843, 854,
- X700, 706, 712, 719, 725, 731, 737, 743,
- X 750, 756, 762, 768, 774, 781, 787, 793,
- X707, 716, 724, 733, 742, 750, 759, 768,
- X 776, 785, 794, 802, 811, 820, 828, 837,
- X785, 795, 804, 814, 824, 834, 844, 853,
- X 863, 873, 883, 893, 902, 912, 922, 932,
- X800, 806, 812, 819, 825, 831, 837, 843,
- X 850, 856, 862, 868, 874, 881, 887, 893,
- X848, 857, 865, 874, 883, 891, 900, 909,
- X 917, 926, 935, 943, 952, 961, 969, 978,
- X865, 876, 886, 897, 908, 919, 930, 940,
- X 951, 962, 973, 984, 994, 1005, 1016, 1027,
- X900, 906, 912, 919, 925, 931, 937, 943,
- X 950, 956, 962, 968, 974, 981, 987, 993,
- X942, 952, 961, 971, 981, 991, 1001, 1010,
- X 1020, 1030, 1040, 1050, 1059, 1069, 1079, 1089,
- X989, 998, 1006, 1015, 1024, 1032, 1041, 1050,
- X 1058, 1067, 1076, 1084, 1093, 1102, 1110, 1119,
- X1000, 1006, 1012, 1019, 1025, 1031, 1037, 1043,
- X 1050, 1056, 1062, 1068, 1074, 1081, 1087, 1093,
- X1038, 1049, 1060, 1070, 1081, 1092, 1103, 1113,
- X 1124, 1135, 1146, 1157, 1167, 1178, 1189, 1200,
- X1099, 1109, 1119, 1128, 1138, 1148, 1158, 1167,
- X 1177, 1187, 1197, 1207, 1216, 1226, 1236, 1246,
- X1100, 1106, 1112, 1119, 1125, 1131, 1137, 1143,
- X 1150, 1156, 1162, 1168, 1174, 1181, 1187, 1193,
- X1130, 1139, 1147, 1156, 1165, 1173, 1182, 1191,
- X 1199, 1208, 1217, 1225, 1234, 1243, 1251, 1260,
- X1200, 1206, 1212, 1219, 1225, 1231, 1237, 1243,
- X 1250, 1256, 1262, 1268, 1274, 1281, 1287, 1293,
- X1211, 1222, 1233, 1243, 1254, 1265, 1276, 1286,
- X 1297, 1308, 1319, 1330, 1340, 1351, 1362, 1373,
- X1256, 1266, 1276, 1285, 1295, 1305, 1315, 1324,
- X 1334, 1344, 1354, 1364, 1373, 1383, 1393, 1403,
- X1272, 1281, 1289, 1298, 1306, 1315, 1323, 1332,
- X 1341, 1349, 1358, 1366, 1375, 1384, 1392, 1401,
- X1300, 1306, 1312, 1319, 1325, 1331, 1337, 1343,
- X 1350, 1356, 1362, 1368, 1374, 1381, 1387, 1393,
- X1384, 1395, 1406, 1416, 1427, 1438, 1449, 1459,
- X 1470, 1481, 1492, 1503, 1513, 1524, 1535, 1546,
- X1400, 1406, 1412, 1419, 1425, 1431, 1437, 1443,
- X 1450, 1456, 1462, 1468, 1474, 1481, 1487, 1493,
- X1410, 1419, 1428, 1436, 1445, 1454, 1463, 1471,
- X 1480, 1489, 1498, 1507, 1515, 1524, 1533, 1542,
- X1413, 1423, 1433, 1442, 1452, 1462, 1472, 1481,
- X 1491, 1501, 1511, 1521, 1530, 1540, 1550, 1560,
- X1500, 1506, 1512, 1519, 1525, 1531, 1537, 1543,
- X 1550, 1556, 1562, 1568, 1574, 1581, 1587, 1593,
- X1555, 1563, 1572, 1581, 1589, 1598, 1606, 1615,
- X 1623, 1632, 1640, 1649, 1657, 1666, 1674, 1683,
- X1557, 1568, 1579, 1589, 1600, 1611, 1622, 1632,
- X 1643, 1654, 1665, 1676, 1686, 1697, 1708, 1719,
- X1570, 1580, 1590, 1599, 1609, 1619, 1629, 1638,
- X 1648, 1658, 1668, 1678, 1687, 1697, 1707, 1717,
- X1696, 1704, 1713, 1722, 1730, 1739, 1747, 1756,
- X 1764, 1773, 1781, 1790, 1798, 1807, 1815, 1824,
- X1727, 1737, 1747, 1756, 1766, 1776, 1786, 1795,
- X 1805, 1815, 1825, 1835, 1844, 1854, 1864, 1874,
- X1730, 1741, 1752, 1762, 1773, 1784, 1795, 1805,
- X 1816, 1827, 1838, 1849, 1859, 1870, 1881, 1892,
- X1837, 1845, 1854, 1863, 1871, 1880, 1888, 1897,
- X 1905, 1914, 1922, 1931, 1939, 1948, 1956, 1965,
- X1884, 1894, 1904, 1913, 1923, 1933, 1943, 1952,
- X 1962, 1972, 1982, 1992, 2001, 2011, 2021, 2031,
- X1903, 1914, 1925, 1935, 1946, 1957, 1968, 1978,
- X 1989, 2000, 2011, 2022, 2032, 2043, 2054, 2065,
- X1978, 1986, 1995, 2004, 2012, 2021, 2029, 2038,
- X 2046, 2055, 2063, 2072, 2080, 2089, 2097, 2106,
- X2041, 2051, 2061, 2070, 2080, 2090, 2100, 2110,
- X 2119, 2129, 2139, 2149, 2159, 2168, 2178, 2188,
- X2076, 2087, 2098, 2108, 2119, 2130, 2141, 2152,
- X 2162, 2173, 2184, 2195, 2206, 2216, 2227, 2238,
- X2120, 2128, 2137, 2145, 2154, 2162, 2171, 2179,
- X 2188, 2196, 2205, 2213, 2222, 2230, 2238, 2247,
- X2198, 2208, 2218, 2227, 2237, 2247, 2257, 2267,
- X 2276, 2286, 2296, 2306, 2316, 2325, 2335, 2345,
- X2249, 2260, 2271, 2281, 2292, 2303, 2314, 2325,
- X 2335, 2346, 2357, 2368, 2379, 2389, 2400, 2411,
- X2355, 2365, 2375, 2384, 2394, 2404, 2414, 2424,
- X 2433, 2443, 2453, 2463, 2473, 2482, 2492, 2502,
- X2422, 2433, 2444, 2454, 2465, 2476, 2487, 2498,
- X 2508, 2519, 2530, 2541, 2552, 2562, 2573, 2584,
- X2595, 2606, 2617, 2627, 2638, 2649, 2660, 2671,
- X 2681, 2692, 2703, 2714, 2725, 2735, 2746, 2757
- X};
- X
- X/*
- X * dxtxdin
- X *
- X * Take info from 'data' and stuff values in the P array, by using
- X * the setval (and setopval) functions. 'data' is the Yamaha VMEM format.
- X * This function works for both the dx100 and tx81z.
- X */
- X
- Xdxtxdin(data)
- Xchar *data;
- X{
- X int dop, adop, n, crs, fin, v;
- X
- X setdxtx();
- X if ( Tx81 )
- X txinit();
- X for ( n=1; n<=4; n++ ) {
- X dop = Dopmap[n-1]*10;
- X adop = Dopmap[n-1]*2;
- X setopval(n,"attack",data[0+dop]);
- X setopval(n,"decay1",data[1+dop]);
- X setopval(n,"level1",data[4+dop]);
- X setopval(n,"decay2",data[2+dop]);
- X setopval(n,"release",data[3+dop]);
- X setopval(n,"keyscale",data[5+dop]);
- X setopval(n,"ampmod",(data[6+dop]>>6)&01);
- X setopval(n,"egbias",(data[6+dop]>>3)&07);
- X setopval(n,"velocity",data[6+dop]&07);
- X setopval(n,"outlevel",data[7+dop]);
- X
- X if ( Tx81 ) {
- X crs = data[8+dop];
- X fin = (data[74+adop]) & 017;
- X v = freqin(crs,fin);
- X setopval(n,"freq",v);
- X }
- X else
- X setopval(n,"freq",data[8+dop]);
- X
- X setopval(n,"keyrate",data[9+dop]>>3);
- X setopval(n,"detune",data[9+dop]&07);
- X
- X if ( Tx81 ) {
- X setopval(n,"egsft",(data[73+adop]>>4)&03);
- X setopval(n,"fix",(data[73+adop]>>3)&01);
- X setopval(n,"wave",(data[74+adop]>>4)&07);
- X }
- X }
- X setval("lfosync",(data[40]>>6)&01);
- X setval("feedback",(data[40]>>3)&07);
- X setval("algorithm",data[40]&07);
- X setval("lfospeed",data[41]);
- X setval("lfodelay",data[42]);
- X setval("pmoddepth",data[43]);
- X setval("amoddepth",data[44]);
- X setval("pmodsens",(data[45]>>4)&07);
- X setval("amodsens",(data[45]>>2)&03);
- X setval("lfowave",data[45]&03);
- X setval("transpose",data[46]);
- X setval("pitchbend",data[47]);
- X setval("portatime",data[49]);
- X setval("modprange",data[51]);
- X setval("modarange",data[52]);
- X setval("breathprange",data[53]);
- X setval("breatharange",data[54]);
- X setval("breathpbias",data[55]);
- X setval("breathegbias",data[56]);
- X setval("playmode",(data[48]>>3)&01);
- X setval("susfoot",(data[48]>>2)&01);
- X setval("portfoot",(data[48]>>1)&01);
- X setval("portmode",data[48]&01);
- X setval("autochan",Channel);
- X if ( Tx81 ) {
- X setval("reverbrate",data[81]&07);
- X setval("fcpitch",data[82]);
- X setval("fcamp",data[83]);
- X }
- X}
- X
- X/*
- X * dxtxdout
- X *
- X * Take (possibly changed) parameters values out of the P array and
- X * put them back into 'data'. 'data' is in the Yamaha VMEM format.
- X * This works for both the dx100 and tx81z.
- X */
- X
- Xdxtxdout(data)
- Xchar *data;
- X{
- X int dop, n, crs, fin;
- X
- X for ( n=1; n<=4; n++ ) {
- X dop = Dopmap[n-1]*10;
- X data[0+dop] = getopval(n,"attack");
- X data[1+dop] = getopval(n,"decay1");
- X data[4+dop] = getopval(n,"level1");
- X data[2+dop] = getopval(n,"decay2");
- X data[3+dop] = getopval(n,"release");
- X data[5+dop] = getopval(n,"keyscale");
- X data[6+dop] = getopval(n,"ampmod")<<6
- X | getopval(n,"egbias")<<3
- X | getopval(n,"velocity");
- X data[7+dop] = getopval(n,"outlevel");
- X data[9+dop] = getopval(n,"keyrate")<<3 | getopval(n,"detune");
- X
- X if ( ! Tx81 ) {
- X data[8+dop] = getopval(n,"freq");
- X }
- X else {
- X freqout(getopval(n,"freq"),&crs,&fin);
- X data[8+dop] = crs;
- X
- X dop = Dopmap[n-1]*2;
- X data[73+dop] = getopval(n,"egsft")<<4
- X | getopval(n,"fix")<<3
- X /* | getopval(n,"fixrg") */;
- X data[74+dop] = getopval(n,"wave")<<4 | fin;
- X }
- X }
- X data[40] = getval("lfosync")<<6
- X | getval("feedback")<<3
- X | getval("algorithm");
- X data[41] = getval("lfospeed");
- X data[42] = getval("lfodelay");
- X data[43] = getval("pmoddepth");
- X data[44] = getval("amoddepth");
- X data[45] = getval("pmodsens")<<4 | getval("amodsens")<<2
- X | getval("lfowave");
- X data[46] = getval("transpose");
- X data[47] = getval("pitchbend");
- X data[49] = getval("portatime");
- X data[51] = getval("modprange");
- X data[52] = getval("modarange");
- X data[53] = getval("breathprange");
- X data[54] = getval("breatharange");
- X data[55] = getval("breathpbias");
- X data[56] = getval("breathegbias");
- X data[48] = (unsigned) ( getval("playmode")<<3
- X | getval("susfoot")<<2
- X | getval("portfoot")<<1
- X | getval("portmode"));
- X
- X if ( Tx81 ) {
- X data[81] = getval("reverbrate");
- X data[82] = getval("fcpitch");
- X data[83] = getval("fcamp");
- X }
- X
- X Channel = getval("autochan");
- X}
- X
- Xsetdxtx()
- X{
- X if ( strcmp(Synthname,"DX-100")==0 )
- X Tx81 = 0;
- X else
- X Tx81 = 1;
- X}
- X
- Xsetopval(n,str,v)
- Xchar *str;
- X{
- X char buff[32];
- X sprintf(buff,"op%d%s",n,str);
- X setval(buff,v);
- X}
- X
- Xgetopval(n,str)
- Xchar *str;
- X{
- X char buff[32];
- X sprintf(buff,"op%d%s",n,str);
- X return(getval(buff));
- X}
- X
- X/*
- X * The routines below are used (in the P array) for printing the
- X * values of various parameters (e.g. the vism3num routine prints
- X * the value-3, which is appropriate for the 'detune' parameter.
- X */
- X
- Xchar Numbuff[8];
- X
- Xchar *visnum();
- X
- Xchar *
- Xvism3num(v)
- X{
- X sprintf(Numbuff,"%d",v-3);
- X return(Numbuff);
- X}
- X
- Xchar *visonoff();
- X
- Xchar *
- Xvismono(v)
- X{
- X if ( v==0 )
- X return("poly");
- X else
- X return("mono");
- X}
- X
- X/*
- X 4 2 4 2 4 4
- X | | | | | 4 |
- X 2---3 ---3 3 4 2 3 1 4 ___|___ 1 2 3
- X | | | | | | | | | | | |__|__|
- X 1 1 1--- 1--- 2 3 1 2 3
- X |__| |__|__|
- X 1 2 3 4
- X |__|__|__|
- X */
- X
- Xchar *Algostr[] = {
- X "1 ~d2---3~u~l|~u~l4~d~d~d~l~l~l~l~l|~l~d1",
- X "2 ~d---3~l~l~l~l~u| |~l~l~l~l~u2 4~l~d~d~d|~l~d1",
- X "3 ~d3 4~l~l~l~l~u|~l~u2~l~d~d~d| |~d~l~l~l~l1---",
- X "4 ~d2 3~l~u|~u~l4~l~d~d~d~l~l~l| |~l~l~l~l~d1---",
- X "5 ~d~u1 4~d~l~l~l~l| |~d~l~l~l~l2 3~d~l~l~l~l----",
- X "6 ~d| | |~u~l~l~l~l~l~l~l___|___~u~l~l~l~l4~l~d~d~d~l~l~l1 2 3~d~l~l~l~l~l~l~l|__|__|",
- X "7 ~d1 2 3~u~l|~u~l4~l~d~d~d~l~l~l~l~l~l|__|__|",
- X "8 ~d1 2 3 4~d~l~l~l~l~l~l~l~l~l~l|__|__|__|"
- X};
- X
- Xchar *
- Xvisdx1a(v)
- X{
- X if ( v >= 0 && v <= 7 )
- X return(Algostr[v]);
- X else
- X return("????");
- X}
- X
- Xchar *
- Xviswave(v)
- X{
- X switch(v){
- X case 0: return("saw up");
- X case 1: return("square");
- X case 2: return("triangle");
- X case 3: return("s/hold");
- X default: return("???");
- X }
- X}
- X
- Xchar *Freqstr[] = { /* values from 0 to 63 */
- X "0.50 ", "0.71 ", "0.78 ", "0.87 ", "1.00 ",
- X "1.41 ", "1.57 ", "1.73 ", "2.00 ", "2.82 ",
- X "3.00 ", "3.14 ", "3.46 ", "4.00 ", "4.24 ",
- X "4.71 ", "5.00 ", "5.19 ", "5.65 ", "6.00 ",
- X "6.28 ", "6.92 ", "7.00 ", "7.07 ", "7.85 ",
- X "8.00 ", "8.48 ", "8.65 ", "9.00 ", "9.42 ",
- X "9.89 ", "10.00", "10.38", "10.99", "11.00",
- X "11.30", "12.00", "12.11", "12.56", "12.72",
- X "13.00", "13.84", "14.00", "14.10", "14.13",
- X "15.00", "15.55", "15.57", "15.70", "16.96",
- X "17.27", "17.30", "18.37", "18.84", "19.03",
- X "19.78", "20.41", "20.76", "21.20", "21.98",
- X "22.49", "23.55", "24.22", "25.95"
- X};
- X
- Xchar *
- Xvisfreq(v)
- X{
- X if ( v >=0 && v <= 63 )
- X return ( Freqstr[v] );
- X else
- X return("????");
- X}
- X
- X/*
- X * dx1sedit
- X *
- X * Send a single voice to the edit buffer of the DX.
- X */
- Xdx1sedit(data)
- Xchar *data;
- X{
- X setdxtx();
- X if ( Tx81 )
- X sendaced(data);
- X sendvced(data);
- X}
- X
- Xsendvced(data)
- Xchar *data;
- X{
- X char vdata[DX100VSIZE];
- X int n, cksum, c;
- X
- X clrdata(vdata,DX100VSIZE);
- X vmtovced(data,vdata);
- X sendmidi(0xf0);
- X sendmidi(0x43);
- X sendmidi(Channel-1); /* channel # */
- X sendmidi(0x03); /* format type */
- X sendmidi(0x00); /* byte count */
- X sendmidi(0x5d); /* byte count */
- X cksum = 0;
- X for ( n=0; n<93; n++ ) {
- X sendmidi(c = (int)(vdata[n]));
- X cksum += c;
- X }
- X sendmidi((-cksum) & 0x7f);
- X sendmidi(EOX);
- X}
- X
- Xsendaced(data)
- Xchar *data;
- X{
- X char *p, vdata[DX100VSIZE];
- X int n, cksum, c;
- X
- X clrdata(vdata,DX100VSIZE);
- X vmtoaced(data,vdata);
- X sendmidi(0xf0);
- X sendmidi(0x43);
- X sendmidi(Channel-1); /* channel # */
- X sendmidi(0x7e); /* format type */
- X sendmidi(0x00); /* byte count */
- X sendmidi(0x21); /* byte count */
- X p = "LM 8976AE";
- X cksum = 0;
- X while ( (c=(int)(*p++)) != '\0' ) {
- X sendmidi(c);
- X cksum += c;
- X }
- X for ( n=0; n<23; n++ ) {
- X sendmidi(c=(int)(vdata[n]));
- X cksum += c;
- X }
- X sendmidi((-cksum) & 0x7f);
- X sendmidi(EOX);
- X}
- X
- X/*
- X * vmtovced
- X *
- X * convert a vmem format voice to vced format.
- X */
- X
- Xvmtovced(data,vdata)
- Xchar *data;
- Xchar *vdata;
- X{
- X int vop, dop, n;
- X
- X for ( n=0; n<4; n++ ) {
- X /* vop = Dopmap[n]*13; */
- X vop = Dopmap[n]*13;
- X dop = Dopmap[n]*10;
- X vdata[vop+0] = data[dop+0]; /* attack rate */
- X vdata[vop+1] = data[dop+1]; /* decay 1 rate */
- X vdata[vop+2] = data[dop+2]; /* decay 2 rate */
- X vdata[vop+3] = data[dop+3]; /* release rate */
- X vdata[vop+4] = data[dop+4]; /* decal 1 level */
- X vdata[vop+5] = data[dop+5]; /* keyboard scaling level */
- X vdata[vop+6] = (data[dop+9]>>3);/* keyboard scaling rate */
- X vdata[vop+7] = (data[dop+6]>>3)&7; /* eg bias sens. */
- X vdata[vop+8] = (data[dop+6]>>6)&1; /* amp. mod. enable */
- X vdata[vop+9] = (data[dop+6]&7); /* key velocity */
- X vdata[vop+10] = data[dop+7]; /* output level */
- X vdata[vop+11] = data[dop+8]; /* osc. frequency */
- X vdata[vop+12] = (data[dop+9]&7); /* detune */
- X }
- X vdata[52] = (data[40]&7); /* algorithm */
- X vdata[53] = (data[40]>>3)&7; /* feedback level */
- X vdata[54] = data[41]; /* lfo speed */
- X vdata[55] = data[42]; /* lfo delay */
- X vdata[56] = data[43]; /* pitch modulation depth */
- X vdata[57] = data[44]; /* amplitude modulation depth */
- X vdata[58] = (data[40]>>6)&1; /* lfo sync */
- X vdata[59] = data[45]&3; /* lfo wave */
- X vdata[60] = (data[45]>>4)&7; /* pitch modulation sens. */
- X vdata[61] = (data[45]>>2)&3; /* amp. modulation sens. */
- X vdata[62] = data[46]; /* transpose */
- X vdata[63] = (data[48]>>3)&1; /* play mode (poly/mono) */
- X vdata[64] = data[47]; /* pitch bend range */
- X vdata[65] = (data[48]&1); /* portamento mode */
- X vdata[66] = data[49]; /* portamento time */
- X vdata[67] = data[50]; /* foot volume range */
- X vdata[68] = (data[48]>>2)&1; /* sustain foot switch */
- X vdata[69] = (data[48]>>1)&1; /* portamento foot switch */
- X vdata[70] = (data[48]>>4)&1; /* chorus switch */
- X vdata[71] = data[51]; /* mod. wheel pitch mod. range */
- X vdata[72] = data[52]; /* mod. wheel ampli. mod. range */
- X vdata[73] = data[53]; /* breath pitch mod. range */
- X vdata[74] = data[54]; /* breath ampli. mod. range */
- X vdata[75] = data[55]; /* breath control pitch bias range */
- X vdata[76] = data[56]; /* breath control EG bias range */
- X for ( n=77; n<93; n++ ) /* voice name AND pitch EG rates */
- X vdata[n] = data[n-20];
- X}
- X
- X/*
- X * vmtoaced
- X *
- X * Convert a vmem format voice to aced format (TX81Z).
- X */
- X
- Xvmtoaced(data,adata)
- Xchar *data;
- Xchar *adata;
- X{
- X int vop, aop, n;
- X
- X for ( n=0; n<4; n++ ) {
- X vop = 73 + Dopmap[n]*2;
- X aop = Dopmap[n]*5;
- X adata[0+aop] = (data[vop]>>3) & 01; /* fixed freq (0,1) */
- X adata[1+aop] = data[vop] & 07; /* fixed freq range (0-7) */
- X adata[2+aop] = data[vop+1] & 017; /* freq range fine (0-15) */
- X adata[3+aop] = (data[vop+1]>>4) & 07; /* op. waveform (0-7) */
- X adata[4+aop] = (data[vop]>>3) & 03; /* EG shift (0-3) */
- X }
- X adata[20] = data[81] & 07; /* reverb rate */
- X adata[21] = data[82]; /* Foot controller pitch */
- X adata[22] = data[83]; /* Foot controller amp. */
- X}
- X
- X#ifdef OLD
- X/*
- X * Send a single parameter value.
- X */
- Xsendparam(param,val)
- X{
- X sendmidi(0xf0);
- X sendmidi(0x43);
- X sendmidi(0x10); /* Channel? */
- X sendmidi(0x12);
- X sendmidi(param);
- X sendmidi(val);
- X sendmidi(EOX);
- X}
- X
- X/*
- X * remotely press a key on the DX
- X */
- Xpresskey(key,val)
- X{
- X sendmidi(0xf0);
- X sendmidi(0x43);
- X sendmidi(0x10); /* Channel? */
- X sendmidi(0x08);
- X sendmidi(key);
- X sendmidi(val);
- X sendmidi(EOX);
- X}
- X
- X/*
- X * tovmem
- X *
- X * convert a vced format voice to vmem format.
- X */
- X
- Xtovmem(vdata,data)
- Xchar *vdata; /* vced format data */
- Xchar *data; /* vmem format */
- X{
- X int vop, dop, n;
- X
- X for ( n=0; n<4; n++ ) {
- X vop = Dopmap[n]*13;
- X dop = Dopmap[n]*10;
- X data[dop+0] = vdata[vop+0]; /* attack rate */
- X data[dop+1] = vdata[vop+1]; /* decay 1 rate */
- X data[dop+2] = vdata[vop+2]; /* decay 2 rate */
- X data[dop+3] = vdata[vop+3]; /* release rate */
- X data[dop+4] = vdata[vop+4]; /* decal 1 level */
- X data[dop+5] = vdata[vop+5]; /* keyboard scaling level */
- X /* amp. mod. enab/eg bias sens/key velocity */
- X data[dop+6]=(vdata[vop+8]<<6) | (vdata[vop+7]<<3) | vdata[vop+9];
- X data[dop+7] = vdata[vop+10]; /* output level */
- X data[dop+8] = vdata[vop+11]; /* osc. frequency */
- X /* key scaling rate/detune */
- X data[dop+9] = (vdata[vop+6]<<3) | vdata[vop+12];
- X }
- X /* lfo sync/feedback level/algorithm */
- X data[40] = (vdata[58]<<6) | (vdata[53]<<3) | vdata[52];
- X data[41] = vdata[54]; /* lfo speed */
- X data[42] = vdata[55]; /* lfo delay */
- X data[43] = vdata[56]; /* pitch modulation depth */
- X data[44] = vdata[57]; /* amplitude modulation depth */
- X /* pitch mod. sens/amp. mod. sens/lfo wave */
- X data[45] = (vdata[60]<<4) | (vdata[61]<<2) | vdata[59];
- X data[46] = vdata[62]; /* transpose */
- X
- X /* chorus/playmode/sustain/portamento-foot/portamento-mode */
- X data[48] = (vdata[70]<<4)|(vdata[63]<<3)|(vdata[68]<<2)|(vdata[69]<<1)
- X | vdata[65];
- X
- X data[47] = vdata[64]; /* pitch bend range */
- X data[49] = vdata[66]; /* portamento time */
- X data[50] = vdata[67]; /* foot volume range */
- X data[51] = vdata[71]; /* mod. wheel pitch mod. range */
- X data[52] = vdata[72]; /* mod. wheel ampli. mod. range */
- X data[53] = vdata[73]; /* breath pitch mod. range */
- X data[54] = vdata[74]; /* breath ampli. mod. range */
- X data[55] = vdata[75]; /* breath control pitch bias range */
- X data[56] = vdata[76]; /* breath control EG bias range */
- X for ( n=77; n<93; n++ ) /* voice name AND pitch EG rates */
- X data[n-20] = vdata[n];
- X}
- X#endif
- X
- X/* dx1nof - return a pointer to the voice name buried in data */
- Xchar *
- Xdx1nof(data)
- Xchar *data;
- X{
- X static char currbuff[DX100NSIZE+1];
- X char *p;
- X int m;
- X
- X p = currbuff;
- X for ( m=0; m<10; m++ )
- X *p++ = data[57+m];
- X *p = '\0';
- X return(currbuff);
- X}
- X
- X/* dx1snof - set the voice name buried in data to name */
- Xdx1snof(data,name)
- Xchar *data;
- Xchar *name;
- X{
- X char *p;
- X int m;
- X
- X for ( p=name,m=0; *p!='\0' && m<10; p++,m++ )
- X data[57+m] = *p;
- X for ( ; m<10; m++ )
- X data[57+m] = ' ';
- X}
- X
- X/* dx1sbulk - send a bulk dump to the DX-100 */
- Xdx1sbulk(data)
- Xchar *data;
- X{
- X int c, v, n, cksum;
- X
- X sendmidi(0xf0);
- X sendmidi(0x43);
- X sendmidi(Channel-1); /* Channel # */
- X sendmidi(0x04);
- X sendmidi(0x20);
- X sendmidi(0x00);
- X cksum = 0;
- X /* send 32 voices worth of data */
- X for ( v=0; v<32; v++ ) {
- X for ( n=0; n<DX100VSIZE; n++ ) {
- X /* The DX100 can only handle 24 voices (but needs */
- X /* to have 32 voices worth of data sent, anyway) */
- X if ( v >= 24 && ( ! Tx81 ) )
- X c = 0;
- X else
- X c = VOICEBYTE(data,v,n);
- X sendmidi(c & 0xff);
- X cksum += c;
- X }
- X }
- X sendmidi((-cksum) & 0x7f);
- X sendmidi(0xf7);
- X return(0);
- X}
- X
- X/* dx1gbulk - Request and read a bulk dump from the DX-100 */
- Xdx1gbulk(data)
- Xchar *data;
- X{
- X int c, n, v, b1, b2, cksum, ret = 1;
- X long begin, toolong;
- X
- X setdxtx();
- X flushmidi();
- X
- X sendmidi(0xf0);
- X sendmidi(0x43);
- X sendmidi(0x20 | (Channel-1) ); /* Channel # */
- X sendmidi(4); /* 4 == 32 voice bulk dump */
- X sendmidi(EOX); /* EOX */
- X
- X begin = milliclock();
- X toolong = begin + 1000 * TIMEOUT;
- X
- X if (synthinfileflag) getmidi(); /* the 0xf0 byte */
- X
- X /* wait for the x43 byte starting the dump */
- X while ( milliclock() < toolong ) {
- X if ( STATMIDI && (c=(getmidi() & 0xff)) == 0x43 )
- X break;
- X }
- X if ( c != 0x43 ) {
- X Reason = "Timeout waiting for 0x43";
- X goto getout;
- X }
- X getmidi(); /* channel # */
- X getmidi(); /* format # */
- X getmidi(); /* byte count high byte */
- X getmidi(); /* byte count low byte */
- X
- X cksum = 0;
- X /* 32 voices are dumped */
- X for ( v=0; v<32; v++ ) {
- X for ( n=0; n<DX100VSIZE; n++ ) {
- X /* twiddle your thumbs, but not forever */
- X while ( ! STATMIDI ) {
- X if ( milliclock() > toolong )
- X goto timeout; /* the end of an era */
- X }
- X c = (getmidi() & 0xff);
- X /* Ignore non-data bytes ? */
- X if ( c & 0x80 )
- X continue;
- X /* compute checksum */
- X cksum += c;
- X /* Only 24 voices are used on the DX100 */
- X if ( v < 24 || Tx81 )
- X VOICEBYTE(data,v,n) = c;
- X }
- X }
- Xtimeout:
- X if ( v < 32 ) {
- X Reason = "Timeout while reading!";
- X goto getout;
- X }
- X b1 = (getmidi() & 0xff); /* Checksum */
- X b2 = (getmidi() & 0xff); /* EOX */
- X cksum = (-cksum) & 0x7f; /* convert to what we must match */
- X if ( b2 != EOX )
- X Reason = "EOX not received";
- X else if ( b1 != cksum ) {
- X static char ckbuff[80];
- X sprintf(ckbuff,"Checksum doesn't match (got %d expected %d)",b1,cksum);
- X /* Reason = "Checksum doesn't match"; */
- X Reason = ckbuff;
- X }
- X else {
- X Reason = "";
- X ret = 0; /* all's well */
- X }
- Xgetout:
- X return(ret);
- X}
- X
- X#ifdef OLDSTUFF
- Xdxchecksum(data)
- Xchar *data;
- X{
- X int v, n, s=0;
- X
- X for ( v=0; v<DX100NVOICES; v++ ) {
- X for ( n=0; n<DX100VSIZE; n++ ) {
- X s += (int)(VOICEBYTE(data,v,n));
- X while ( s > 128 )
- X s -= 128;
- X }
- X }
- X return(128-s);
- X}
- X#endif
- X
- Xfreqin(crs,fin)
- X{
- X int n, f;
- X
- X txinit();
- X f = txfreq[crs*16+fin];
- X for ( n=0; n<txleng; n++ ) {
- X if ( txfreq[txindex[n]] == f )
- X return(n);
- X }
- X return(0);
- X}
- X
- Xfreqout(v,acrs,afin)
- Xint *acrs;
- Xint *afin;
- X{
- X int i;
- X
- X i = txindex[v];
- X *acrs = i/16;
- X *afin = i%16;
- X}
- X
- Xtxinit()
- X{
- X int n, k;
- X char *parm;
- X
- X if ( txindex != NULL )
- X return;
- X /* create an array of indexes into txfreq, giving a sorted */
- X /* list of unique frequencies. */
- X txindex = (int *) alloc(sizeof(int) * 64 * 16);
- X for ( n=0; n<64; n++ ) {
- X for ( k=0; k<16; k++ ) {
- X int freq = txfreq[n*16+k];
- X register int i, f;
- X register int *p, *endp;
- X
- X /* insertion sort, starting from top of already */
- X /* sorted list, since the values we're inserting */
- X /* are almost sorted already. */
- X for ( i=txleng-1; i>=0; i-- ) {
- X if ( (f=txfreq[txindex[i]]) < freq )
- X break;
- X if ( f == freq )
- X goto dontadd;
- X }
- X i++;
- X /* shift everything up one */
- X p = &txindex[txleng];
- X endp = &txindex[i];
- X for ( ; p>endp; p-- )
- X *p = *(p-1);
- X txindex[i] = 16*n+k;
- X txleng++;
- X dontadd: ;
- X }
- X }
- X /* set the maximum value for the frequency parameters */
- X parm = "op#freq";
- X for ( n=1; n<=4; n++ ) {
- X parm[2] = '0' + n;
- X if ( (k=parmindex(parm)) >= 0 )
- X P[k].p_max = txleng-1;
- X }
- X}
- END_OF_FILE
- if test 24461 -ne `wc -c <'yama_com.c'`; then
- echo shar: \"'yama_com.c'\" unpacked with wrong size!
- fi
- # end of 'yama_com.c'
- fi
- echo shar: End of archive 10 \(of 15\).
- cp /dev/null ark10isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 15 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-
-